1 /*
2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021
3 License:   [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License].
4 Authors: Marcelo S. N. Mancini
5 
6 	Copyright Marcelo S. N. Mancini 2018 - 2021.
7 Distributed under the CC BY-4.0 License.
8    (See accompanying file LICENSE.txt or copy at
9 	https://creativecommons.org/licenses/by/4.0/
10 */
11 module hip.view.testscene;
12 version(Test):
13 
14 import hip.graphics.g2d.geometrybatch;
15 import hip.hiprenderer.shader;
16 import hip.hiprenderer;
17 import hip.hiprenderer.viewport;
18 import hip.view.scene;
19 import hip.math.utils;
20 
21 class TestScene : Scene, IHipPreloadable
22 {
23     import hip.api;
24 
25     mixin Preload;
26 
27     //Lower Level API. Not available in the Scripting API
28     GeometryBatch geom;
29     Shader shader;
30 
31     IHipFont smallFont;
32     IHipFont bigFont;
33 
34     @Asset("sounds/pop.wav")
35     __gshared IHipAudioClip pop;
36 
37 
38     AHipAudioSource src;
39 
40     import hip.graphics.g2d.particles;
41     HipParticleSystem sys;
42 
43 
44     float x = 100, y = 100;
45 
46     override void initialize()
47     {
48         logg(getAssetsForPreload);
49         // logg(pop is null);
50         geom = new GeometryBatch(null, 5000, 5000);
51         geom.setColor(HipColor.green);
52 
53         setWindowSize(HipRenderer.width, HipRenderer.height);
54         src = HipAudio.getSource();
55         src.clip = pop;
56 
57 
58         smallFont = HipDefaultAssets.getDefaultFontWithSize(20);
59         bigFont = HipDefaultAssets.getDefaultFontWithSize(64);
60 
61         sys = new HipParticleSystem(500);
62         sys.config.colors = [HipColorStop(HipColor.red, 0), HipColorStop(HipColor(0x000000ff), 0.2)];
63         sys.config.velocityYInit = ValueRange(0, -300);
64         sys.setEmissionZone(100, 150, 100, 150);
65     }
66     override void update(float dt)
67     {
68         super.update(dt);
69         if(HipInput.areGamepadButtonsJustPressed([HipGamepadButton.psSquare, HipGamepadButton.psTriangle]))
70             logg("Button combination pressed!");
71 
72         auto v = HipInput.getAnalog(HipGamepadAnalogs.leftStick);
73 
74         x+= dt*400*v[0];
75         y+= dt*400*v[1];
76 
77         if(HipInput.isMouseButtonJustReleased(HipMouseButton.left))
78         {
79             src.play();
80             if(HipInput.isDoubleClicked(HipMouseButton.left))
81                 logg("Double clicked");
82             else
83                 logg("You just clicked me!");
84         }
85 
86         if(HipInput.isKeyJustPressed(HipKey.ENTER))
87         {
88             logg("Don't press ENTER!");
89         }
90         sys.update(dt);
91     }
92 
93     override void render()
94     {
95         //////////////////////Lower Level////////////////////////
96         super.render();
97         geom.setColor(HipColor.red);
98         geom.fillRectangle(0, 0, 200, 200);
99         geom.setColor(HipColor.green);
100         geom.fillRectangle(0, 0, 100, 100);
101         geom.flush();
102 
103 
104         //Use a non GC allocating string on render (String) for drawing the mousePosition
105         import hip.util.string;
106         float[2] mousePos = HipInput.getMousePosition();
107         setFont(smallFont);
108         String s = String(mousePos);
109         drawText(s.toString, cast(int)mousePos[0], cast(int)mousePos[1]);
110 
111         
112 
113         ////////////////////////Higher Level////////////////////////
114         setGeometryColor(HipColor.white);
115         setFont(null);
116         drawText("Hello World Test Scene (Default Font)", 300, 280, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP);
117         fillRectangle(cast(int)x, cast(int)y, 100, 100);
118 
119         drawText("Null Textures uses that sprite over here", 300, 480, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP);
120         fillRectangle(cast(int)x+200, cast(int)y, 100, 100);
121         drawTexture(null, 300, 500);
122 
123         sys.draw();
124 
125     }
126 }